[新機能] 異常な API アクティビティを自動検出!CloudTrail Insights がリリースされました!
先日のアップデートで CloudTrail Insights という新機能が追加されました。
CloudTrail Insights とは
CloudTrail は AWS アカウント内のアクティビティをログに記録することで、セキュリティ分析や、リソース変更を追跡するなど、トラブルシューティングや運用監査するうえで非常に役に立つサービスです。(まだ有効にしてない方は、これを機にいますぐ設定しましょう!それくらい重要です)
そして、CloudTrail Insights はこのアクティビティログを AWS 側のマネージド環境で機械学習させ、通常と異なる挙動が起きている場合に、異常アクティビティとして検出してくれる機能です!
利用可能なリージョン
- すべての商用リージョンで利用可能です!
分析対象のイベント
公式ガイドには「異常な書き込み管理 API アクティビティを検出」と記載されているので、対象としては書き込み管理イベントになります。
S3 オブジェクトレベルのイベントは管理イベントではなく、データイベントとして扱われますので対象外のようですね。
Insights events are logged when CloudTrail detects unusual write management API activity in your account.
(公式ガイド: Logging Insights Events for Trails)
書き込みイベントは「リソースを変更する(または変更する可能性がある)API オペレーション」です。既に CloudTrail を取得されている環境であれば、「読み取り専用」フィルターの値を false
にすることで、どのようなイベントが書き込みイベントであるか確認できます。
ちなみに ConsoleLogin
は、ログイン時に指定している URL によって CloudTrail に記録されるリージョンが異なるのでご注意ください。デフォルトの https://xxxxxxx.signin.aws.amazon.com/console
であれば、バージニアに記録されているはずなので、東京リージョンのログを見て「あれ?あれ? ConsoleLogin 取れてないやん」とならないように。(余談でした)
価格
- $0.35/分析された100,000 書き込み管理イベント
やってみる
それでは CloudTrail Insights を有効化してみましょう。CloudTrail ダッシュボードから「証跡情報」をクリック。今回は証跡情報を新規に設定する手順としますので、「証跡の作成」クリック。
任意の証跡名を入力し、リージョン、管理イベントはデフォルトのまま進めます。Insights イベントの有効/無効を作成時に指定できますので「はい」を選択します。(既存の証跡を利用される場合は、ここの項目を同様に変更するだけで OK です)
ストレージの場所として新規にバケットを作成するか、既存バケットを指定し、さいごに「作成」をクリックします。
証跡情報の一覧を確認し、 Insights
が「有効にする」(ちょっと日本語訳がおかしいですね)になっていれば OK です。
設定後、最初のイベントを受信するまでに最大で 36 時間かかるそうなので、すぐにイベントを確認することは出来ませんでした。
確認
さぁ、設定が完了したらどんなイベントがあがってくるのか確認してみましょう。
と、お見せしたいところですが当方の検証環境では最大 36 時間の待ち状態なのか、いつもより多めに 20 インスタンスほど RunInstances
してみましたが、まだ検出ログが表示されておりませんので、ここは公式ブログのサンプルを拝借いたします。
サンプル
以下は公式ガイドに記載されている RunInstances
に対する異常 API コール時の画像となります。
どのように分析されたかは Insights から JSON で確認することが可能なようです。以下、公式ブログのサンプルログです。
{ "Records": [ { "eventVersion": "1.07", "eventTime": "2019-11-07T13:25:00Z", "awsRegion": "us-east-1", "eventID": "a9edc959-9488-4790-be0f-05d60e56b547", "eventType": "AwsCloudTrailInsight", "recipientAccountId": "-REDACTED-", "sharedEventID": "c2806063-d85d-42c3-9027-d2c56a477314", "insightDetails": { "state": "Start", "eventSource": "ec2.amazonaws.com", "eventName": "RunInstances", "insightType": "ApiCallRateInsight", "insightContext": { "statistics": { "baseline": { "average": 0.0020833333}, "insight": { "average": 6} } } }, "eventCategory": "Insight"}, { "eventVersion": "1.07", "eventTime": "2019-11-07T13:26:00Z", "awsRegion": "us-east-1", "eventID": "33a52182-6ff8-49c8-baaa-9caac16a96ce", "eventType": "AwsCloudTrailInsight", "recipientAccountId": "-REDACTED-", "sharedEventID": "c2806063-d85d-42c3-9027-d2c56a477314", "insightDetails": { "state": "End", "eventSource": "ec2.amazonaws.com", "eventName": "RunInstances", "insightType": "ApiCallRateInsight", "insightContext": { "statistics": { "baseline": { "average": 0.0020833333}, "insight": { "average": 6}, "insightDuration": 1} } }, "eventCategory": "Insight"} ] }
ベースラインが分あたり 0.002 API コールの環境に対して、分あたり 6 回の API コールが行われたため、異常として検出されていることが判りますね。
GuardDuty と何が違うの?
GuardDuty と重複するような部分もあるとは思いますが、GuardDuty はどちらかというと EC2 や IAM などに対しての脅威検出に強みがありますが、それほど多くの AWS リソースに対しては対応していません。検出可能なイベントは公式ガイドの「アクティブな結果タイプ」を参照ください。
CloudTrail Insights の場合、すべての書き込み管理 API コールが分析の対象となるので、GuardDuty が守備範囲としていない AWS リソースに対しての異常 API コールを検出してくれるという点で非常にありがたい機能となっています。
さいごに
これまでこのような検出をする場合は、S3 に出力されたログを Athena で分析するような作り込みが必要でしたが、今回のアップデートで非常に簡単に実装できるようになりました!
GuardDuty とあわせて CloudTrail Insights を利用することで、異常検出がより強固になったという印象です。どちらか一方を選ぶというものではなく、基本的にはどちらも有効化することが推奨となる機能かと思います。設定は非常に簡単ですので、オススメです!
まだ自分の検証環境では検出ログが出ていないのですが、検出ログが出力されるようになったら、どのようなものが検出できるか、いろいろ試してブログで紹介したいと思います!
以上!大阪オフィスの丸毛(@marumo1981)でした!